/*
 * @Author: wufan 929523653@qq.com
 * @Date: 2025-08-20 11:40:10
 * @LastEditors: wufan 929523653@qq.com
 * @LastEditTime: 2025-08-21 17:35:09
 * @FilePath: \mars3d-vue-project-01\src\widgets\job-site-list\map.ts
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import * as mars3d from "mars3d"

let map: mars3d.Map // 地图对象

// 需要覆盖config.json中地图属性参数（当前示例框架中自动处理合并）
export const mapOptions = {
  scene: {
    center: { lat: 36.6666, lng: 111.111, alt: 46390, heading: 2, pitch: -68 }
  }
}

// 初始化当前业务
export function onMounted(mapInstance: mars3d.Map): void {
  map = mapInstance // 记录map
  // 设置初始相机视角（包含 heading、pitch），确保生效
  // map.setCameraView({
  //   lat: 31.628661,
  //   lng: 117.251952,
  //   alt: 46390,
  //   heading: 2,
  //   pitch: -68,
  //   duration: 0.8
  // })
  console.log(map)

  console.log(map.options)
  console.log(map.getCameraView())

  // 方案0-更新地球参数
  map.setOptions({
    ...mapOptions
  })

  console.log(map.options)
  console.log(map.getCameraView())
  console.log(map.getBasemaps())

  // // 方案1: 使用mars3d.Util.merge进行深度合并（推荐）
  // map.setOptions(mars3d.Util.merge(map.getOptions(), mapOptions))

  // // 方案2: 使用Object.assign
  // map.setOptions(Object.assign({}, map.getOptions(), mapOptions))

  // // 方案3: 使用lodash的merge函数（如果项目中已引入lodash）
  // import { merge } from "lodash"
  // map.setOptions(merge({}, map.getOptions(), mapOptions))

  // // 方案4: 明确指定要更新的属性
  // map.setOptions({
  //   scene: {
  //     center: mapOptions.scene.center
  //   }
  // })
}

// 释放当前业务
export function onUnmounted(): void {
  map = null
}

// 飞向视角
export function flytoView(target: any) {
  if (!map) {
    console.warn("map is not ready.")
    return
  }

  let view: any
  if (target && typeof target.longitude === "number" && typeof target.latitude === "number") {
    // 支持 { longitude, latitude }
    view = {
      lng: target.longitude,
      lat: target.latitude
    }
  } else if (target && typeof target.lng === "number" && typeof target.lat === "number") {
    // 支持 { lng, lat }
    view = {
      lng: target.lng,
      lat: target.lat
    }
  } else {
    console.warn("invalid target for flytoView:", target)
    return
  }

  // 统一补充默认飞行参数
  view.alt = typeof target?.alt === "number" ? target.alt : 1500
  view.heading = typeof target?.heading === "number" ? target.heading : 0
  view.pitch = typeof target?.pitch === "number" ? target.pitch : -45
  const duration = typeof target?.duration === "number" ? target.duration : 1.5

  map.setCameraView(view, { duration })
}
